package top.yehot.kettle.boot.controller;

import java.util.List;

import javax.validation.Valid;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.baomidou.mybatisplus.core.metadata.IPage;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import top.yehot.cmm.util.spring.anns.ResponseResult;
import top.yehot.kettle.boot.core.SysConst;
import top.yehot.kettle.boot.models.vo.task.TaskAddVO;
import top.yehot.kettle.boot.models.vo.task.TaskEditVO;
import top.yehot.kettle.boot.models.vo.task.TaskSearchVO;
import top.yehot.kettle.boot.models.vo.task.TaskVO;
import top.yehot.kettle.boot.service.TaskService;

/**
 * 任务管理
 * 
 * @author lquan
 * @date 2022年6月5日 下午3:18:51
 */
@Api(tags = "任务管理")
@RestController
@RequestMapping(SysConst.VERSION + "/task")
@AllArgsConstructor
@ResponseResult
public class TaskController {
	
	private final TaskService taskService;
	
	@ApiOperation("任务列表（分页）")
	@PostMapping("page")
	public IPage<TaskVO> page(@RequestBody TaskSearchVO param) {
		return taskService.page(param);
	}
	
	@ApiOperation("任务新增")
	@PostMapping("add")
	public void add(@RequestBody @Valid TaskAddVO param) {
		taskService.add(param);
	}
	
	@ApiOperation("根据ID查询任务信息")
	@GetMapping("/findById")
	public TaskEditVO findById(@RequestParam("id") Integer id) {
		return taskService.findById(id);
	}
	
	@ApiOperation("任务编辑")
	@PostMapping("edit")
	public void edit(@RequestBody @Valid TaskEditVO param) {
		taskService.edit(param);
	}
	
	@ApiOperation("任务删除")
	@GetMapping("delete")
	public void deleteTask(@RequestParam("id") Integer id) {
		taskService.delete(id);
	}
	
	@ApiOperation("任务启动")
	@GetMapping("start")
	public void start(@RequestParam("id") Integer id) {
		taskService.start(id);
	}
	
	@ApiOperation("任务停止")
	@GetMapping("stop")
	public void stop(@RequestParam("id") Integer id) {
		taskService.stop(id);
	}
	
	@ApiOperation("解析cron")
	@GetMapping("parseCron")
	public List<String> parseCron(@RequestParam("cron") String cron) {
		return taskService.parseCron(cron);
	}

}
